import { IPSModelObject } from '../ipsmodel-object';
import { IPSModelSortable } from '../ipsmodel-sortable';
import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSDEFieldBase } from '../dataentity/defield/ipsdefield-base';
import { IPSDEMethodDTO } from '../dataentity/service/ipsdemethod-dto';
import { IPSSysMethodDTO } from './ipssys-method-dto';

/**
 *
 * @export
 * @interface IPSSysMethodDTOField
 */
export interface IPSSysMethodDTOField extends IPSDEFieldBase, IPSModelSortable, IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 默认值
   * @type {string}
   */
  defaultValue: string;

  /**
   * 默认值类型
   * @type {string}
   */
  defaultValueType: string;

  /**
   * 属性标记
   * @type {string}
   */
  fieldTag: string;

  /**
   * 属性标记2
   * @type {string}
   */
  fieldTag2: string;

  /**
   * Json格式化
   * @type {string}
   */
  jsonFormat: string;

  /**
   * 中文名称
   * @type {string}
   */
  logicName: string;

  /**
   * 引用实体方法DTO对象
   *
   * @type {IPSDEMethodDTO}
   */
  getRefPSDEMethodDTO(): IPSDEMethodDTO | null;

  /**
   * 引用实体方法DTO对象
   *
   * @type {IPSDEMethodDTO}
   */
  get refPSDEMethodDTO(): IPSDEMethodDTO | null;

  /**
   * 引用实体方法DTO对象（必须存在）
   *
   * @type {IPSDEMethodDTO}
   */
  getRefPSDEMethodDTOMust(): IPSDEMethodDTO;

  /**
   * 引用实体对象
   *
   * @type {IPSDataEntity}
   */
  getRefPSDataEntity(): IPSDataEntity | null;

  /**
   * 引用实体对象
   *
   * @type {IPSDataEntity}
   */
  get refPSDataEntity(): IPSDataEntity | null;

  /**
   * 引用实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getRefPSDataEntityMust(): IPSDataEntity;

  /**
   * 引用系统方法DTO对象
   *
   * @type {IPSSysMethodDTO}
   */
  getRefPSSysMethodDTO(): IPSSysMethodDTO | null;

  /**
   * 引用系统方法DTO对象
   *
   * @type {IPSSysMethodDTO}
   */
  get refPSSysMethodDTO(): IPSSysMethodDTO | null;

  /**
   * 引用系统方法DTO对象（必须存在）
   *
   * @type {IPSSysMethodDTO}
   */
  getRefPSSysMethodDTOMust(): IPSSysMethodDTO;

  /**
   * DTO属性来源类型
   * @description 值模式 [实体方法DTO对象属性来源类型] {DEFIELD：实体属性、 DEFGROUPDETAIL：实体属性组成员、 DER：实体关系、 DYNAMODELATTR：动态模型属性、 DEACTIONPARAM：实体行为参数、 DEFSEARCHMODE：属性搜索模式、 DEDATASETPARAM：实体数据集参数 }
   * @type {( string | 'DEFIELD' | 'DEFGROUPDETAIL' | 'DER' | 'DYNAMODELATTR' | 'DEACTIONPARAM' | 'DEFSEARCHMODE' | 'DEDATASETPARAM')}
   */
  sourceType: string | 'DEFIELD' | 'DEFGROUPDETAIL' | 'DER' | 'DYNAMODELATTR' | 'DEACTIONPARAM' | 'DEFSEARCHMODE' | 'DEDATASETPARAM';

  /**
   * 标准数据类型
   * @description 值模式 [属性标准数据类型] {0：UNKNOWN、 1：BIGINT、 2：BINARY、 3：BIT、 4：CHAR、 5：DATETIME、 6：DECIMAL、 7：FLOAT、 8：IMAGE、 9：INT、 10：MONEY、 11：NCHAR、 12：NTEXT、 13：NVARCHAR、 14：NUMERIC、 15：REAL、 16：SMALLDATETIME、 17：SMALLINT、 18：SMALLMONEY、 19：SQL_VARIANT、 20：SYSNAME、 21：TEXT、 22：TIMESTAMP、 23：TINYINT、 24：VARBINARY、 25：VARCHAR、 26：UNIQUEIDENTIFIER、 27：DATE、 28：TIME、 29：BIGDECIMAL }
   * @type {( number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29)}
   * @default 0
   */
  stdDataType: number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29;

  /**
   * 系统DTO对象属性类型
   * @description 值模式 [实体方法DTO属性类型] {SIMPLE：简单数据类型、 SIMPLES：简单数据类型数组、 DTO：DTO对象、 DTOS：DTO对象数组 }
   * @type {( string | 'SIMPLE' | 'SIMPLES' | 'DTO' | 'DTOS')}
   */
  type: string | 'SIMPLE' | 'SIMPLES' | 'DTO' | 'DTOS';

  /**
   * 允许空输入
   * @type {boolean}
   * @default true
   */
  allowEmpty: boolean;

  /**
   * 只读属性
   * @type {boolean}
   * @default false
   */
  readOnly: boolean;
}
